import { defineStore } from 'pinia'
import { Names } from './namespace/index.ts'

// 第六章
type Result = {
    name: string
    isChu: boolean
    price: number
}

const Login = (): Promise<Result> => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve({
                name: '小满',
                isChu: true,
                price:10
            })
        }, 3000)
    })
}

export const useTestStore = defineStore(Names.Test, {
    state:() => {
        return {
            current:1,
            age:10,
            name:'zs',
            counter: 0,
            user: <Result>{},
        }
    },
    //类似于computed 可以帮我们去修饰我们的值
    // 使用箭头函数不能使用this this指向已经改变指向undefined 修改值请用state
    //
    // 主要作用类似于computed 数据修饰并且有缓存
    getters:{
        newPrice:(state)=> `$${state.user.price}`,
        // 普通函数形式可以使用this
        newCurrent ():number {
            return ++this.current
        },
    //     getters 互相调用
        newCurrent1 ():number | string {
            return ++this.current + this.newName
        },
        newName ():string {
            return `$-${this.name}`
        }
    },
    //可以操作异步 和 同步提交state
    actions:{
        // 同步 直接调用即可
        setCurrent () {
            this.current++
        },
        increment() {
            this.counter++
        },
        randomizeCounter() {
            this.counter = Math.round(100 * Math.random())
        },
        // 异步 可以结合async await 修饰
        async getLoginInfo() {
            const result = await Login()
            this.user = result;
            this.setName(result.name)
        },
        setName (name:string) {
            this.name = name;
        }
    }

})